home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ For TASM / THUNK95.PAK / TOOLS.CPP < prev    next >
C/C++ Source or Header  |  1996-02-21  |  3KB  |  110 lines

  1. //----------------------------------------------------------------------------
  2. // Thunk95 example program
  3. // Copyright (c) 1996 by Borland International, All Rights Reserved
  4. //----------------------------------------------------------------------------
  5. #include <string.h>
  6. #pragma hdrstop
  7. #include "tools.h"
  8.  
  9. //
  10. // Multiply16 - demonstrates a simple case of passing and returning
  11. // integral types.
  12. //
  13. long PASCAL __export Multiply16(int i, long l)
  14.    {
  15.    return (i*l);
  16.    }
  17.  
  18.  
  19. //
  20. // MultiplyReal16 - demonstrates passing real types.
  21. //
  22. void PASCAL __export MultiplyReal16(double v1, double v2, long double* result)
  23.    {
  24.    *result = (long double)v1 * (long double)v2;
  25.    }
  26.  
  27.  
  28. //
  29. // Used by StringLookup16 to fill a provided (passed) buffer
  30. //
  31. char * stringTable[] = {
  32.    "Thunk95 example",
  33.    "Passing a buffer",
  34.    "from a 32-bit program",
  35.    "to a 16-bit DLL.",
  36.    "Copyright 1996",
  37.    "Borland, International"
  38.    };
  39.  
  40. int __export stringTableSize = sizeof(stringTable)/sizeof(stringTable[0]);
  41.  
  42. int PASCAL __export StrTableSize16(void)
  43.    {
  44.    return stringTableSize;
  45.    }
  46.  
  47. //
  48. // StringLookup16 - demonstrates initializing a buffer which has been
  49. // allocated in scope of the 32-bit application and passed to the
  50. // 16-bit DLL.
  51. //
  52. bool PASCAL __export StringLookup16(int index, LPSTR bfr)
  53.    {
  54.    bool isValid = (index>=0) && (index<stringTableSize);
  55.    if(isValid)
  56.       strcpy(bfr, stringTable[index]);
  57.    else
  58.       strcpy(bfr, "Invalid index");
  59.    return isValid;
  60.    }
  61.  
  62.  
  63. //
  64. // Used by GetRecord16 to demonstrate passing a structure.
  65. //
  66. EmpRecord empDB [] =
  67.    {
  68.    { 1, "Mary", "Contrary", SALARY, 1003, 62018.36, 56850.16, 932213878UL },
  69.    { 2, "Joe", "Schlabotnik", WAGE, 1003, 15.36, 29286.40, 555123686UL },
  70.    { 3, "Bo", "Diddly", QUIT, 9999, 15.36, 31948.98, 600845387UL },
  71.    { 4, "Mae", "Nard", UNDEF, 8888, 15.36, 31948.98, 109205894UL },
  72.    { 5, "Josephine", "Jeans", NEWHIRE, 1023, 15.36, 31948.98, 464213579UL }
  73.    };
  74.  
  75. int empCount = sizeof(empDB)/sizeof(empDB[0]);
  76.  
  77. int PASCAL __export EmpCount16(void)
  78.    {
  79.    return empCount;
  80.    }
  81.  
  82. //
  83. // GetRecord16 - demonstrates passing structures.
  84. //
  85. bool PASCAL __export GetRecord16(int index, EmpRecord* rec)
  86.    {
  87.    // Simulate lookup for example
  88.    bool isValid = (index>=0) && (index<empCount);
  89.    if(!isValid)
  90.       memset(rec, 0, sizeof(EmpRecord));
  91.    else
  92.       {
  93. #if 1
  94.       *rec = empDB[index];
  95. #else
  96.       rec->empNum = empDB[index].empNum;
  97.       strcpy(rec->name, empDB[index].name);
  98.       strcpy(rec->family, empDB[index].family);
  99.       rec->status = empDB[index].status;
  100.       rec->dept = empDB[index].dept;
  101.       rec->wage = empDB[index].wage;
  102.       rec->ytdEarnings = empDB[index].ytdEarnings;
  103.       rec->ssn = empDB[index].ssn;
  104. #endif
  105.       }
  106.    return isValid;
  107.    }
  108.  
  109.  
  110.